1時間プログラミング 002 標準入力に与えられた文字列について、ランダムに行を選択して出力する
概要
標準入力に与えられた文字列について、ランダムに行を選択して出力するコマンド
使い方
code:terminal
$ seq 1 10 | choose
6
$ seq 1 10 | choose -n 2
5
2
実装
標準入力の内容を行で区切って配列にして、ランダムにシャッフルした後、先頭から$ N要素取得して出力する
コードを一部抜粋
code:choose.rs
struct Opt {
n: usize,
}
fn main() -> Result<()> {
let opt = Opt::from_args();
let n = opt.n;
if n == 0 {
return Err(anyhow!("illegal row count"));
}
let reader = BufReader::new(io::stdin());
let lines: Vec<String> = reader.lines().map(|l| l.unwrap()).collect();
let mut rng = rand::thread_rng();
let res = lines.choose_multiple(&mut rng, n);
for l in res {
println!("{}", l);
}
Ok(())
}
感想
15分くらいで終わった
タイトルが長い